/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.gestionareasriesgo.persistencia;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import uy.edu.ort.gestionareasriesgo.entidades.Accidente;
import uy.edu.ort.gestionareasriesgo.entidades.AreaRiesgo;
import uy.edu.ort.gestionareasriesgo.entidades.FactorRiesgo;

/**
 *
 * @author Mattahari
 */
public class HelperPersistencia implements Serializable {

    public static void guardarGenerico(Object o) {
        EntityManager em = FabricaEntityManager.get().createEntityManager();
        em.getTransaction().begin();
        em.persist(o);
        em.getTransaction().commit();
        em.close();
    }

    public static List<AreaRiesgo> obtenerAreasRiesgo() {
        List<AreaRiesgo> retorno = new ArrayList<AreaRiesgo>();
        obtenerLista(retorno, "select t from AreaRiesgo t");
        return retorno;
    }
    
    public static List<Accidente> obtenerAccidentes() {
        List<Accidente> retorno = new ArrayList<Accidente>();
        obtenerLista(retorno, "select t from Accidente t");
        return retorno;
    }

    public static List<FactorRiesgo> obtenerFactoresRiesgo() {
        List<FactorRiesgo> retorno = new ArrayList<FactorRiesgo>();
        obtenerLista(retorno, "select t from FactorRiesgo t");
        return retorno;
    }

    public static boolean existeAreaRiesgo(String codigo) {
        for (AreaRiesgo a : HelperPersistencia.obtenerAreasRiesgo()) {
            if (a.getCodigoArea().trim().equalsIgnoreCase(codigo.trim())) {
                return true;
            }
        }
        return false;
    }

    public static boolean existeNombreAreaRiesgo(String nombre) {
        for (AreaRiesgo a : HelperPersistencia.obtenerAreasRiesgo()) {
            if (a.getNombre().trim().equalsIgnoreCase(nombre.trim())) {
                return true;
            }
        }
        return false;
    }

    public static boolean existeAccidente(String codigo) {
        for (Accidente a : HelperPersistencia.obtenerAccidentes()) {
            if (a.getCodigo().trim().equalsIgnoreCase(codigo.trim())) {
                return true;
            }
        }
        return false;
    }

    private static <T> void obtenerLista(List<T> retorno, String query) {
        EntityManager em = FabricaEntityManager.get().createEntityManager();
        Query q = em.createQuery(query);
        List<T> resultado = q.getResultList();
        for (T a : resultado) {
            retorno.add(a);
        }
        em.close();
    }
}
